// import { BASE_URL } from "@/config/base";
const BASE_URL = ''
/**
 * 全局跳转
 * @param url 跳转的页面地址
 * @returns
 */
export const navTo = (url) => {
	if (url.indexOf("/pages/") != -1 || url.indexOf("/subPackage/") != -1) {
		uni.navigateTo({
			url: url,
		});
	} else if (url == "back") {
		uni.navigateBack();
	}
};

/**
 * 防抖函数
 * @param fn 需要执行的函数
 * @param time 间隔时间
 * @returns
 */
export const debounce = (func, wait, immediate) => {
	let timeout; // 定义一个计时器变量，用于延迟执行函数
	return function(...args) {
		// 返回一个包装后的函数
		const context = this; // 保存函数执行上下文对象
		const later = function() {
			// 定义延迟执行的函数
			timeout = null; // 清空计时器变量
			if (!immediate) func.apply(context, args); // 若非立即执行，则调用待防抖函数
		};
		const callNow = immediate && !timeout; // 是否立即调用函数的条件
		clearTimeout(timeout); // 清空计时器
		timeout = setTimeout(later, wait); // 创建新的计时器，延迟执行函数
		if (callNow) func.apply(context, args); // 如果满足立即调用条件，则立即执行函数
	};
};

/**
 * 节流函数
 * @param fn 需要执行的函数
 * @param time 间隔时间
 * @returns
 */
export const throttle = (func, wait) => {
	let timeout; // 定义一个计时器变量，用于限制函数调用频率
	return function(...args) {
		// 返回一个包装后的函数
		const context = this; // 保存函数执行上下文对象
		if (!timeout) {
			// 如果计时器不存在
			func.apply(context, args); // 执行函数
			timeout = setTimeout(() => {
				timeout = null; // 清空计时器变量
			}, wait); // 创建计时器，在指定时间后重置计时器变量
		}
	};
};

// 计算title高度与微信小程序胶囊对齐
export const getTitleTop = () => {
	const sBarHeight = uni.getSystemInfoSync().statusBarHeight;
	let titleTop = 0;
	const menu = uni.getMenuButtonBoundingClientRect();
	titleTop = menu.top + (menu.height - sBarHeight) / 2; //顶部标题对齐
	uni.setStorageSync("systemInfo", {
		sBarHeight,
		titleTop
	});
};

/**
 * 获取屏幕剩余高度
 * @param alreadyheight 手机状态栏高度
 * @returns newsPanelHeight 屏幕剩余高度
 */
export const getScreenSHeight = (alreadyheight) => {
	return new Promise((reslove, reject) => {
		uni.getSystemInfo({
			success: function(res) {
				let newsPanelHeight = res.windowHeight - alreadyheight;
				reslove(newsPanelHeight);
			},
		});
	});
};

/**
 * 获取页面距离顶部高度设置nav颜色
 * @param element 元素类名
 * @returns bgColor navBar背景颜色
 */
export const setNavBgColor = (element) => {
	return new Promise((resolve, reject) => {
		let view = uni.createSelectorQuery().select(element);
		let {
			sBarHeight,
			titleTop
		} = uni.getStorageSync("systemInfo");
		let top = sBarHeight + titleTop;
		let bgColor = "";
		view
			.boundingClientRect((data) => {
				if (data.top <= top) bgColor = "#b4e4e7";
				if (data.top >= top) bgColor = "transparent";
				resolve(bgColor);
			})
			.exec();
	});
};

/**
 * 获取元素高度
 * @param element 元素类名
 * @returns height 元素高度
 */

export const getElementHeight = (element) => {
	return new Promise((resolve, reject) => {
		let view = uni.createSelectorQuery().select(element);
		view
			.boundingClientRect((data) => {
				const {
					height
				} = data;
				resolve(height);
			})
			.exec();
	});
};

/**
 * 获取微信小程序胶囊信息
 */
export const getWXStatusHeight = () => {
	// 获取距上
	const barTop = uni.getSystemInfoSync().statusBarHeight;
	// 获取胶囊按钮位置信息
	const menuButtonInfo = uni.getMenuButtonBoundingClientRect();
	// 获取导航栏高度
	const barHeight = menuButtonInfo.height + (menuButtonInfo.top - barTop) * 2;
	let barWidth = menuButtonInfo.width;
	uni.setStorageSync("capsule", {
		barTop,
		barHeight,
		barWidth
	});
};

/**
 * 上传图片多张
 * @param count 上传数量
 * @param sourceType 类型
 * @returns resultObj 返回图片信息
 */
export const uploadImage = (count = 1, sourceType, ajaxType = "dan") => {
	let urlList = [];
	return new Promise((reslove, reject) => {
		uni.chooseImage({
			count: count,
			sizeType: ["original", "compressed"], //可以指定是原图还是压缩图，默认二者都有
			sourceType: [sourceType], //从相册选择
			success: async (res) => {
				await uni.showLoading({
					title: "上传中",
				});
				let fileList = res.tempFilePaths;
				let queue = [];
				fileList.forEach((item) => {
					queue.push(upload(item));
				});
				const listRes = await Promise.all(queue);
				listRes.forEach((item) => urlList.push(item[0]));
				reslove(urlList);
			},
		});
	});
};

const upload = (item) => {
	return new Promise((reslove, reject) => {
		let urlList = [];
		uni.uploadFile({
			url: BASE_URL + "/prod-api/common/upload",
			header: {
				"content-type": "multipart/form-data",
				Authorization: "Bearer " + uni.getStorageSync("token"),
			},
			filePath: item,
			name: "file",
			success: (result) => {
				let resultObj = JSON.parse(result.data);
				console.log(resultObj, "result");
				urlList = [...urlList, resultObj.url];
				reslove(urlList);
				uni.hideLoading();
				// uni.showToast({
				//   title: "上传成功",
				//   icon: "none",
				// });
			},
			fail: (err) => {
				uni.showToast({
					title: "上传失败",
					icon: "none",
				});
				// uni.hideLoading();
				reject(err);
			},
		});
	});
};

/**
 * 上传文件
 *
 */
export const uploadFile = () => {
	return new Promise((reslove, reject) => {
		uni.chooseMessageFile({
			// 只能选取微信聊天框中的文件
			count: 1, // 最多选择一个文件
			type: "file", // 选择文件类型
			success: function(res) {
				// 获取文件的本地临时文件路径
				const tempFiles = res.tempFiles[0];
				uni.showLoading({
					title: "正在上传",
				});
				uni.uploadFile({
					url: BASE_URL + "/index.php/api/upload/temporary", //服务器地址
					filePath: tempFiles.path, //文件临时路径
					name: "file",
					header: {
						"Content-Type": "multipart/form-data",
					},
					formData: {
						type: "document",
					},
					success: (res) => {
						reslove(JSON.parse(res.data).data);
						// 上传成功执行
						uni.hideLoading();
					},
					fail: (error) => {
						reject(error);
						uni.hideLoading();
					},
				});
			},
		});
	});
};

//点击保存到相册
// base64
export const saveImage = (imgUrl) => {
	uni.showLoading({
		title: "保存中",
	});
	var byte = imgUrl.replace("data:image/png;base64,", "");
	const fs = uni.getFileSystemManager(); //全局唯一的文件管理器
	console.log(byte, "by");
	var number = Math.random();
	fs.writeFile({
		filePath: wx.env.USER_DATA_PATH + "/code" + number + ".png",
		data: byte,
		encoding: "base64",
		success(res) {
			uni.saveImageToPhotosAlbum({
				//保存为png格式到相册
				filePath: wx.env.USER_DATA_PATH + "/code" + number + ".png",
				success: function(res) {
					uni.showToast({
						title: "下载成功",
						icon: "none"
					});
					uni.hideLoading();
				},
				fail: function(err) {
					console.log(err);
					uni.hideLoading();
				},
			});
		},
	});
};

// 保存图片 url
//下载海报，只在APP内有效
export const downPicture = (url) => {
	uni.showLoading({
		title: "保存中",
	});
	uni.downloadFile({
		//下载
		url: url, //图片下载地址
		success: (res) => {
			if (res.statusCode === 200) {
				uni.saveImageToPhotosAlbum({
					//保存图片到系统相册。
					filePath: res.tempFilePath, //图片文件路径
					success: function() {
						uni.showToast({
							title: "图片保存成功",
							icon: "none",
						});
						uni.hideLoading();
					},
					fail: function(e) {
						console.log(e);
						uni.showToast({
							title: "图片保存失败",
							icon: "none",
						});
						uni.hideLoading();
					},
				});
			}
		},
	});
};

// 上传单张图片
export const dUpload = () => {
	return new Promise((reslove, reject) => {
		uni.chooseImage({
			//选择图片
			count: 1, //图片数量默认9
			sizeType: ["compressed"], //可以指定是原图还是压缩图，默认二者都有
			sourceType: ["camera", "album"], //album 从相册选图，camera 使用相机，默认二者都有。如需直接开相机或直接选相册，请只使用一个选项
			success: (res) => {
				uni.showLoading({
					title: "上传中",
				});
				var tempFilePaths = res.tempFilePaths;
				uni.uploadFile({
					//上传图片至服务器
					url: BASE_URL + "/prod-api/common/upload",
					filePath: tempFilePaths[0],
					name: "file",
					header: {
						"content-type": "multipart/form-data",
						Authorization: "Bearer " + uni.getStorageSync("token"),
					},
					success: (uploadFileRes) => {
						console.log(uploadFileRes, "uploadFileRes");
						if (uploadFileRes.statusCode == 200) {
							let file = JSON.parse(uploadFileRes.data);
							uni.hideLoading();
							uni.showToast({
								title: "上传成功",
								icon: "none",
							});
							reslove(file.url);
						}
					},
				});
			},
			fail: (err) => {
				uni.hideLoading();
				uni.showToast({
					title: "上传失败",
					icon: "none",
				});
			},
		});
	});
};